<?php
namespace App\Utils;

class ComUtil
{
    /**
     * 按修改时间排序获取目录内的文件
     *
     * @param string $dir 目录绝对路径
     * @param string|array $ext 指定筛选文件后缀
     *
     * @return array 文件列表数组（相对路径）
     */
    public static function dirFileByTime($dir, $ext = "*")
    {
        $dh = @opendir($dir); // 打开目录，返回一个目录流
        $result = array();
        $times = array();
        while ($file = @readdir($dh)) { // 循环读取目录下的文件
            if ($file != '.' and $file != '..') {

                $path = $dir . '\\' . $file;    // 设置目录，用于含有子目录的情况
                if (is_file($path)) {
                    if (!empty($ext) && $ext != "*") {
                        if (strpos($ext, pathinfo($path, PATHINFO_EXTENSION))) {
                            $times[] = date("Y-m-d H:i:s", filemtime($path)); // 获取文件最近修改日期
                            $result[] = $file;     //只记录相对路径
                        }
                    } else {
                        $times[] = date("Y-m-d H:i:s", filemtime($path)); // 获取文件最近修改日期
                        $result[] = $file;     //只记录相对路径
                    }

                }//判断是否是文件

            }//忽略上层目录和当前目录
        }
        @closedir($dh); // 关闭目录流
        if (isset($times)) {
            array_multisort($times, SORT_DESC, SORT_STRING, $result);    //按时间排序
        }

        return $result;
    }
}